package com.qdxwx.data.service.menu;

import com.qdxwx.common.entity.Ztree;
import com.qdxwx.models.manager.Manager;
import com.qdxwx.models.manager.Menu;
import com.qdxwx.models.manager.Role;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 菜单 业务层
 * Qdx NetSchool Platform
 * @author qdxwx
 * @updateTime 2022/5/25
 * @description
 */
public interface MenuService
{

    List<Menu> getRoots(Manager manager);
    /**
     * 根据用户ID和主菜单ID查询菜单
     *
     * @param manager 用户信息
     * @param rootId 主菜单ID
     * @return 菜单列表
     */
    List<Menu> getListByManager(Manager manager, Integer rootId);

    /**
     * 查询系统菜单列表
     * 
     * @param menu 菜单信息
     * @param managerId 用户ID
     * @return 菜单列表
     */
    List<Menu> getList(Menu menu, Integer managerId);

    /**
     * 查询菜单集合
     * 
     * @param managerId 用户ID
     * @return 所有菜单信息
     */
    List<Menu> getListAll(Integer managerId);

    /**
     * 根据用户ID查询权限
     * 
     * @param managerId 用户ID
     * @return 权限列表
     */
    Set<String> getPermsByManagerId(Integer managerId);

    /**
     * 根据角色ID查询菜单
     * 
     * @param role 角色对象
     * @param managerId 用户ID
     * @return 菜单列表
     */
    List<Ztree> getTreeByRole(Role role, Integer managerId);

    /**
     * 查询所有菜单信息
     * 
     * @param managerId 用户ID
     * @return 菜单列表
     */
    List<Ztree> getTreeByManagerId(Integer managerId);

    /**
     * 查询系统所有权限
     * 
     * @param managerId 用户ID
     * @return 权限列表
     */
    Map<String, String> getAllPerms(Integer managerId);

    /**
     * 删除菜单管理信息
     * 
     * @param menuId 菜单ID
     * @return 结果
     */
    int deleteById(Integer menuId);

    /**
     * 根据菜单ID查询信息
     * 
     * @param menuId 菜单ID
     * @return 菜单信息
     */
    Menu getById(Integer menuId);

    /**
     * 查询菜单数量
     * 
     * @param parentId 菜单父ID
     * @return 结果
     */
    int countByParentId(Integer parentId);

    /**
     * 新增保存菜单信息
     * 
     * @param menu 菜单信息
     * @return 结果
     */
    int insert(Menu menu);

    /**
     * 修改保存菜单信息
     * 
     * @param menu 菜单信息
     * @return 结果
     */
    int update(Menu menu);

    /**
     * 校验菜单名称是否唯一
     * 
     * @param menu 菜单信息
     * @return 结果
     */
    boolean isExistMenuName(Menu menu);

    /**
     * 查询菜单使用数量
     *
     * @param menuId 菜单ID
     * @return 结果
     */
    int countRoleMenuById(Integer menuId);

    int deleteRoleMenuById(Integer menuId);
}
